今天要來講集合類型裡面的 Set(組),他特別得地方就是他沒有定義的順序。如果你要的東西順序不重要,或者需要東西不重複僅出現一次的話,就可以使用它。
先來介紹一下他裡面一個有點像 ID 的東西,hashable 只要是要存在集合類型的都會有一個hash值,而他會是一個Int的值,可以使用 .hashValue 來顯示你的hash值
在更詳細的可以去找一下他的定義。
Set就是他的寫法,他沒有其他的特別縮寫方式。
var letters = Set<Character>()
letters.insert("a")
// 新增一個東西進入 letters type為Character
letters = []
// 現在是一個空Set,但type 還是 Character
也可以使用數組文字來初始化一個Set,或是將多個值寫成一個 Set
var favoriteGenres: Set<String> = ["Rock", "Classical", "Hip hop"]
Set 跟 Array 一樣可以使用,count 、 isEmpty、 insert(:)、 remove(:),來做修改跟檢查。
Set 有一些操作可以讓你判斷不同的 Set 有沒有東西包含,不包含,部分包含或者不相同。
let oddDigits: Set = [1, 3, 5, 7, 9]
let evenDigits: Set = [0, 2, 4, 6, 8]
let singleDigitPrimeNumbers: Set = [2, 3, 5, 7]
oddDigits.union(evenDigits).sorted()
// [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
oddDigits.intersection(evenDigits).sorted()
// []
oddDigits.subtracting(singleDigitPrimeNumbers).sorted()
// [1, 9]
oddDigits.symmetricDifference(singleDigitPrimeNumbers).sorted()
// [1, 2, 9]
接下來下圖描述了三個集合-a,b和c-重疊的區域表示集合之間共享的元素。集a是集b的超級集,因為a包含b中的所有元素。相反,因為b中的所有元素也都包含在a中,所以集合b是集合a的子集。集b和集c彼此之間是不相交的,因為它們沒有共同的元素。
let houseAnimals: Set =["?", "?"]
let farmAnimals: Set =["?", "?", "?", "?", "?"]
let cityAnimals: Set =["?", "?"]
houseAnimals.isSubset(of: farmAnimals)
// true
farmAnimals.isSuperset(of: houseAnimals)
// true
farmAnimals.isDisjoint(with: cityAnimals)
// true
今天就先到這,讓我們明天繼續。